﻿Public Class xtf_ABMarticulo

    Dim ulg_row As DataRow
    Dim obj_Articulo As cls_articulo_ = Nothing
    Dim dtt_proveedorarticulo_2 As DataTable

    Dim dtt_articulocomposicionarticulo_ As DataTable
    Dim dtt_articulocomposicionmaquinariatarea_ As DataTable
    Dim dtt_articulocomposicionproceso_ As DataTable

    Dim dtt_composicion As New DataTable

    Public Sub New()
        InitializeComponent()
        Cargararticulorubro_()
        Cargarunidad_()
        CargarTipoCosto_()

        'Prepara grid y datasource proveedorarticulo----------------------------------------------------
        gdv_proveedorarticulo_2.Tag = New Collections.Generic.List(Of cls_proveedorarticulo_)
        dtt_proveedorarticulo_2 = New DataTable
        dtt_proveedorarticulo_2.Columns.Add("idproveedor", GetType(Integer))
        dtt_proveedorarticulo_2.Columns.Add("Proveedor", GetType(String))
        dtt_proveedorarticulo_2.Columns.Add("Valor", GetType(Decimal))
        dtt_proveedorarticulo_2.Columns.Add("Moneda", GetType(String))
        dtt_proveedorarticulo_2.Columns.Add("Unidad", GetType(String))
        dtt_proveedorarticulo_2.Columns.Add("Fecha", GetType(DateTime))
        dtt_proveedorarticulo_2.Columns.Add("Objeto", GetType(Object))

        gdc_proveedorarticulo_2.DataSource = dtt_proveedorarticulo_2
        gdc_proveedorarticulo_2.ForceInitialize()

        gdv_proveedorarticulo_2.PopulateColumns()
        gdv_proveedorarticulo_2.Columns("Objeto").Visible = False
        gdv_proveedorarticulo_2.Columns("idproveedor").Visible = False
        '-----------------------------------------------------------------------------------------------

        'Prepara grid y datasource composicion----------------------------------------------------
        gdv_composicion.Tag = New Collections.Generic.List(Of Object)
        dtt_composicion = New DataTable
        dtt_composicion.Columns.Add("Tipo", GetType(String))
        dtt_composicion.Columns.Add("Nombre", GetType(String))
        dtt_composicion.Columns.Add("Cantidad", GetType(Decimal))
        dtt_composicion.Columns.Add("CantidadSTR", GetType(String))
        dtt_composicion.Columns.Add("Unidad", GetType(String))
        dtt_composicion.Columns.Add("Valor", GetType(Decimal))
        dtt_composicion.Columns.Add("Total", GetType(Decimal))
        dtt_composicion.Columns.Add("Porcentaje", GetType(String))
        dtt_composicion.Columns.Add("objeto", GetType(Object))
        dtt_composicion.Columns.Add("mantenimiento", GetType(Object))

        gdc_composicion.DataSource = dtt_composicion
        gdc_composicion.ForceInitialize()
        gdv_composicion.PopulateColumns()
        gdv_composicion.Columns("Nombre").ColumnEdit = New DevExpress.XtraEditors.Repository.RepositoryItemMemoEdit
        gdv_composicion.OptionsView.RowAutoHeight = False

        gdv_composicion.Columns("Cantidad").DisplayFormat.FormatType = DevExpress.Utils.FormatType.Numeric
        gdv_composicion.Columns("Cantidad").DisplayFormat.FormatString = "n" & int_cantdecimales
        gdv_composicion.Columns("Cantidad").Visible = False
        gdv_composicion.Columns("objeto").Visible = False
        gdv_composicion.Columns("mantenimiento").Visible = False

        gdv_composicion.Columns("CantidadSTR").AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Far
        gdv_composicion.Columns("Porcentaje").AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Far

        gdv_composicion.Columns("Valor").DisplayFormat.FormatType = DevExpress.Utils.FormatType.Numeric
        gdv_composicion.Columns("Valor").DisplayFormat.FormatString = "n" & int_cantdecimales
        gdv_composicion.Columns("Total").DisplayFormat.FormatType = DevExpress.Utils.FormatType.Numeric
        gdv_composicion.Columns("Total").DisplayFormat.FormatString = "n" & int_cantdecimales

        gdv_composicion.Columns("CantidadSTR").Caption = "Cantidad"
        '-----------------------------------------------------------------------------------------------

        cbo_tipoCosto.SelectedIndex = 0
        pic_imagen.Tag = ""

        AgregarValidaciones()
    End Sub

    Public Overrides Sub CargarObjetos()
        Cargararticulorubro_()
        'Cargarunidad_()
    End Sub

    Private Sub Cargararticulorubro_()
        Dim tmp_obj As Object = Nothing
        If Not IsNothing(cbo_articulorubro.SelectedItem) Then
            tmp_obj = cbo_articulorubro.SelectedItem
        End If

        cbo_articulorubro.Properties.Items.Clear()
        Dim articulorubro_ As New cls_articulorubro_
        If articulorubro_.CargarTodos Then
            For Each articulorubro As cls_articulorubro_ In articulorubro_.Items
                cbo_articulorubro.Properties.Items.Add(articulorubro)
            Next
            cbo_articulorubro.SelectedIndex = 0
            cbo_articulorubro.Enabled = True

            If Not IsNothing(tmp_obj) Then
                For Each obj As cls_articulorubro_ In cbo_articulorubro.Properties.Items
                    If obj.idarticulorubro = tmp_obj.idarticulorubro Then
                        cbo_articulorubro.SelectedItem = obj
                        Exit For
                    End If
                Next
            End If
        Else
            cbo_articulorubro.Enabled = False
            cbo_articulorubro.SelectedItem = Nothing
        End If
    End Sub

    Private Sub CargarTipoCosto_()
        cbo_tipoCosto.Properties.Items.Clear()
        For Each tipocosto As cls_articulo_.enu_tipocosto In [Enum].GetValues(GetType(cls_articulo_.enu_tipocosto))
            cbo_tipoCosto.Properties.Items.Add(EnumDescription(tipocosto))
        Next
        cbo_tipoCosto.SelectedIndex = 0
    End Sub

    Private Sub Cargarunidad_()
        Dim tmp_obj As Object = Nothing
        If Not IsNothing(cbo_Unidad.SelectedItem) Then
            tmp_obj = cbo_Unidad.SelectedItem
        End If
        cbo_Unidad.Properties.Items.Clear()

        Dim unidad_ As New cls_unidad_
        If unidad_.CargarTodos Then
            For Each unidad As cls_unidad_ In unidad_.Items
                cbo_Unidad.Properties.Items.Add(unidad)
            Next
            cbo_Unidad.SelectedIndex = 0
            cbo_Unidad.Enabled = True

            If Not IsNothing(tmp_obj) Then
                For Each obj As cls_unidad_ In cbo_Unidad.Properties.Items
                    If obj.idunidad = tmp_obj.idunidad Then
                        cbo_Unidad.SelectedItem = obj
                        Exit For
                    End If
                Next
            End If
        Else
            cbo_Unidad.Enabled = False
            cbo_Unidad.SelectedItem = Nothing
        End If
    End Sub

    Public Shadows Sub Nuevo(ByRef listado As Form)
        Try
            frm_listado = listado
            Me.Text = CType(frm_listado, xtf_ListadoBase).lbl_modulo.Text & " - Nuevo"
            obj_Articulo = New cls_Articulo_
            btn_Registro.Enabled = False
            Me.Show()
        Catch ex As Exception
            'Dim frmError As New frm_ErrorManager(ex.Message)
        End Try
    End Sub

    Public Shadows Sub Modificar(ByRef Articulo As cls_articulo_, ByRef listado As Form, ByRef row As DataRow)
        If IsNothing(obj_Articulo) Then
            obj_Articulo = New cls_Articulo_
        End If
        obj_Articulo = Articulo
        frm_listado = listado
        ulg_row = row : bbi_imprimir.Enabled = True
        btn_Arbol.Enabled = True

        Me.Text = CType(frm_listado, xtf_ListadoBase).lbl_modulo.Text & " - " & obj_Articulo.ToString
        txt_ID.Text = obj_Articulo.idArticulo
        txt_Nombre.Text = obj_Articulo.nombre
        txt_nombreventa.Text = obj_Articulo.nombreventa
        txt_Codigo.Text = obj_Articulo.codigo
        txt_url.Text = obj_Articulo.url
        txt_bulto.Text = obj_Articulo.bulto
        cbo_tipoCosto.SelectedIndex = obj_Articulo.tipocosto
        cbo_tipoCosto_SelectedIndexChanged(Nothing, Nothing)
        chk_bloquearcosto.Checked = obj_Articulo.costobloqueado

        If obj_Articulo.idproveedor <> 0 Then
            txt_Proveedor.Text = obj_Articulo.proveedor.ToString
            txt_Proveedor.Tag = obj_Articulo.proveedor
        Else
            txt_Proveedor.Text = ""
            txt_Proveedor.Tag = Nothing
        End If

        Try
            pic_imagen.Image = System.Drawing.Image.FromFile(obj_Articulo.pathimagen)
        Catch ex As Exception
        End Try


        cbo_articulorubro.Text = obj_Articulo.articulorubro.ToString
        For Each obj As cls_articulorubro_ In cbo_articulorubro.Properties.Items
            If obj.idarticulorubro = obj_Articulo.idarticulorubro Then
                cbo_articulorubro.SelectedItem = obj
                Exit For
            End If
        Next
        txt_Descripcion.Text = obj_Articulo.descripcion
        txt_Notas.Text = obj_Articulo.notas
        chk_EnVenta.Checked = obj_Articulo.enventa
        opt_Tipo.SelectedIndex = obj_Articulo.tipo
        'cbo_Unidad.Text = obj_Articulo.unidad.ToString
        For Each obj As cls_unidad_ In cbo_Unidad.Properties.Items
            If obj.idunidad = obj_Articulo.idunidad Then
                cbo_Unidad.SelectedItem = obj
                Exit For
            End If
        Next

        For Each obj As cls_unidaddetalle_ In cbo_unidaddetalle.Properties.Items
            If obj.idunidaddetalle = obj_Articulo.idunidaddetalle Then
                cbo_unidaddetalle.SelectedItem = obj
                Exit For
            End If
        Next

        dtt_proveedorarticulo_2.Clear()
        gdv_proveedorarticulo_2.Tag.Clear()
        If Not IsNothing(obj_Articulo.proveedorArticulo_) Then
            If Not IsNothing(obj_Articulo.proveedorArticulo_.Items) Then
                For Each proveedorArticulo As cls_proveedorarticulo_ In obj_Articulo.proveedorArticulo_.Items
                    Dim Item As DataRow = dtt_proveedorarticulo_2.NewRow
                    Item("idproveedor") = proveedorArticulo.idproveedor
                    Item("Proveedor") = proveedorArticulo.proveedor.ToString
                    Item("Valor") = proveedorArticulo.unidaddetalle.CValCargar(proveedorArticulo.valor)
                    Item("Moneda") = proveedorArticulo.moneda.simbolo
                    Item("Unidad") = proveedorArticulo.unidaddetalle.ToString
                    Item("Fecha") = proveedorArticulo.registro.fechacreado
                    Item("Objeto") = proveedorArticulo

                    dtt_proveedorarticulo_2.Rows.Add(Item)
                Next
            End If
        End If

        CargarComposicion()
        cbo_tipoCosto_SelectedIndexChanged(Nothing, Nothing)

        btn_Registro.Enabled = True
        obj_Articulo.proveedorArticulo_ = Nothing
        obj_Articulo.articulocomposicionarticulo_ = Nothing
        obj_Articulo.articulocomposicionmaquinariatarea_ = Nothing
        obj_Articulo.articulocomposicionproceso_ = Nothing
        obj_Articulo.articulorubro = Nothing
        obj_Articulo.unidad = Nothing
        obj_Articulo.proveedor = Nothing
        Me.Show()

    End Sub

#Region "Botonera Composicion"

    Private Sub tsb_ComposicionNuevoACA_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsb_ComposicionNuevoACA.Click
        Dim ABMarticulocomposicionarticulo As New xtf_ABMarticulocomposicionarticulo(cbo_unidaddetalle.SelectedItem)
        If ABMarticulocomposicionarticulo.ShowDialog = Windows.Forms.DialogResult.OK Then
            gdv_composicion.BeginDataUpdate()
            Dim ACA As cls_articulocomposicionarticulo_ = ABMarticulocomposicionarticulo.obj_articulocomposicionarticulo
            Dim dtt_row As DataRow = dtt_composicion.NewRow
            dtt_row("Tipo") = "Material"
            dtt_row("Nombre") = ACA.articulo.ToString
            dtt_row("Cantidad") = CType(cbo_unidaddetalle.SelectedItem, cls_unidaddetalle_).CValCargar(ACA.unidaddetalle.CCantCargar(ACA.cantidad))
            dtt_row("CantidadSTR") = dtt_row("Cantidad")
            dtt_row("Unidad") = ACA.unidaddetalle.ToString
            dtt_row("Valor") = ACA.unidaddetalle.CValCargar(ACA.valor)
            dtt_row("Total") = dtt_row("Cantidad") * dtt_row("Valor")
            dtt_row("objeto") = ACA
            dtt_composicion.Rows.Add(dtt_row)
            gdv_composicion.EndDataUpdate()
        End If
        ModificarComposicion()
    End Sub
    Private Sub tsb_ComposicionNuevoACM_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsb_ComposicionNuevoACM.Click
        Dim ABMarticulocomposicionmaquinariatarea As New xtf_ABMarticulocomposicionmaquinariatarea
        If ABMarticulocomposicionmaquinariatarea.ShowDialog = Windows.Forms.DialogResult.OK Then
            gdv_composicion.BeginDataUpdate()
            Dim ACM As cls_articulocomposicionmaquinariatarea_ = ABMarticulocomposicionmaquinariatarea.obj_articulocomposicionmaquinariatarea
            Dim dtt_row As DataRow = dtt_composicion.NewRow
            dtt_row("Tipo") = "Maquinaria"
            dtt_row("Nombre") = ACM.maquinariatarea.ToString
            dtt_row("Cantidad") = CType(cbo_unidaddetalle.SelectedItem, cls_unidaddetalle_).CValCargar(ACM.cantidad)
            dtt_row("CantidadSTR") = CantidadMinToString(dtt_row("Cantidad"))
            dtt_row("Unidad") = "Tiempo"
            dtt_row("Valor") = ACM.valor * 60
            dtt_row("Total") = dtt_row("Cantidad") * ACM.valor
            dtt_row("objeto") = ACM
            dtt_composicion.Rows.Add(dtt_row)


            'Mantenimiento
            Dim dtt_rowM As DataRow = dtt_composicion.NewRow
            dtt_rowM("Tipo") = "Mantenimiento"
            dtt_rowM("Nombre") = ACM.maquinariatarea.ToString
            dtt_rowM("Cantidad") = CType(cbo_unidaddetalle.SelectedItem, cls_unidaddetalle_).CValCargar(ACM.cantidad)
            dtt_rowM("CantidadSTR") = CantidadMinToString(dtt_row("Cantidad"))
            dtt_rowM("Unidad") = "Tiempo"
            dtt_rowM("Valor") = ACM.valorMantenimiento * 60
            dtt_rowM("Total") = dtt_rowM("Cantidad") * ACM.valorMantenimiento
            dtt_row("mantenimiento") = dtt_rowM
            dtt_rowM("Objeto") = Nothing
            'dtt_row("objeto") = ACM
            dtt_composicion.Rows.Add(dtt_rowM)

            gdv_composicion.EndDataUpdate()
        End If
        ModificarComposicion()
    End Sub
    Private Sub tsb_ComposicionNuevoACP_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsb_ComposicionNuevoACP.Click
        Dim ABMarticulocomposicionproceso As New xtf_ABMarticulocomposicionproceso
        If ABMarticulocomposicionproceso.ShowDialog = Windows.Forms.DialogResult.OK Then
            gdv_composicion.BeginDataUpdate()
            Dim ACP As cls_articulocomposicionproceso_ = ABMarticulocomposicionproceso.obj_articulocomposicionproceso
            Dim dtt_row As DataRow = dtt_composicion.NewRow
            dtt_row("Tipo") = "Personal"
            dtt_row("Nombre") = ACP.proceso.ToString
            dtt_row("Cantidad") = CType(cbo_unidaddetalle.SelectedItem, cls_unidaddetalle_).CValCargar(ACP.cantidad)
            dtt_row("CantidadSTR") = CantidadMinToString(dtt_row("Cantidad"))
            dtt_row("Unidad") = "Tiempo"
            dtt_row("Valor") = ACP.valor * 60
            dtt_row("Total") = dtt_row("Cantidad") * ACP.valor
            dtt_row("objeto") = ACP
            dtt_composicion.Rows.Add(dtt_row)
            gdv_composicion.EndDataUpdate()
        End If
        ModificarComposicion()
    End Sub

    Private Sub gdv_composicion__DoubleClick(ByVal sender As Object, ByVal e As EventArgs) Handles gdv_composicion.DoubleClick
        Dim view As DevExpress.XtraGrid.Views.Grid.GridView = CType(sender, DevExpress.XtraGrid.Views.Grid.GridView)
        Dim pt As Point = view.GridControl.PointToClient(Control.MousePosition)
        gdv_articulocomposicionarticulo_DoRowDoubleClick(view, pt)
    End Sub

    Public Overridable Sub gdv_articulocomposicionarticulo_DoRowDoubleClick(ByVal view As DevExpress.XtraGrid.Views.Grid.GridView, ByVal pt As Point)
        Dim info As DevExpress.XtraGrid.Views.Grid.ViewInfo.GridHitInfo = view.CalcHitInfo(pt)
        If info.InRow OrElse info.InRowCell Then
            Dim colCaption As String
            If info.Column Is Nothing Then
                colCaption = "N/A"
            Else
                colCaption = info.Column.GetCaption()
            End If
            tsb_ComposicionModificar.PerformClick()
        End If
    End Sub

    Private Sub tsb_ComposicionModificar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsb_ComposicionModificar.Click
        If gdv_composicion.SelectedRowsCount > 0 Then
            Dim Elemento As Object = gdv_composicion.GetDataRow(gdv_composicion.GetSelectedRows(0))("objeto")
            Select Case Elemento.GetType.ToString
                Case GetType(cls_articulocomposicionarticulo_).ToString
                    Dim ABMarticulocomposicionarticulo As New xtf_ABMarticulocomposicionarticulo(cbo_unidaddetalle.SelectedItem)
                    ABMarticulocomposicionarticulo.Modificar(Elemento)
                    If ABMarticulocomposicionarticulo.ShowDialog = Windows.Forms.DialogResult.OK Then
                        gdv_composicion.BeginDataUpdate()
                        Dim dtt_row As DataRow = gdv_composicion.GetDataRow(gdv_composicion.GetSelectedRows(0))
                        Dim ACA As cls_articulocomposicionarticulo_ = ABMarticulocomposicionarticulo.obj_articulocomposicionarticulo
                        dtt_row("Tipo") = "Material"
                        dtt_row("Nombre") = ACA.articulo.ToString
                        dtt_row("Cantidad") = CType(cbo_unidaddetalle.SelectedItem, cls_unidaddetalle_).CValCargar(ACA.unidaddetalle.CCantCargar(ACA.cantidad))
                        dtt_row("CantidadSTR") = dtt_row("Cantidad")
                        dtt_row("Unidad") = ACA.unidaddetalle.ToString
                        dtt_row("Valor") = ACA.unidaddetalle.CValCargar(ACA.valor)
                        dtt_row("Total") = dtt_row("Cantidad") * dtt_row("Valor")
                        dtt_row("objeto") = ACA
                        gdv_composicion.EndDataUpdate()
                    End If
                Case GetType(cls_articulocomposicionmaquinariatarea_).ToString
                    Dim ABMarticulocomposicionmaquinariatarea As New xtf_ABMarticulocomposicionmaquinariatarea
                    ABMarticulocomposicionmaquinariatarea.Modificar(Elemento)
                    If ABMarticulocomposicionmaquinariatarea.ShowDialog = Windows.Forms.DialogResult.OK Then
                        gdv_composicion.BeginDataUpdate()
                        Dim dtt_row As DataRow = gdv_composicion.GetDataRow(gdv_composicion.GetSelectedRows(0))
                        Dim ACM As cls_articulocomposicionmaquinariatarea_ = ABMarticulocomposicionmaquinariatarea.obj_articulocomposicionmaquinariatarea
                        dtt_row("Tipo") = "Maquinaria"
                        dtt_row("Nombre") = ACM.maquinariatarea.ToString
                        dtt_row("Cantidad") = CType(cbo_unidaddetalle.SelectedItem, cls_unidaddetalle_).CValCargar(ACM.cantidad)
                        dtt_row("CantidadSTR") = CantidadMinToString(dtt_row("Cantidad"))
                        dtt_row("Unidad") = "Tiempo"
                        dtt_row("Valor") = ACM.valor * 60
                        dtt_row("Total") = dtt_row("Cantidad") * ACM.valor
                        dtt_row("objeto") = ACM
                        gdv_composicion.EndDataUpdate()
                    End If
                Case GetType(cls_articulocomposicionproceso_).ToString
                    Dim ABMarticulocomposicionproceso As New xtf_ABMarticulocomposicionproceso
                    ABMarticulocomposicionproceso.Modificar(Elemento)
                    If ABMarticulocomposicionproceso.ShowDialog = Windows.Forms.DialogResult.OK Then
                        gdv_composicion.BeginDataUpdate()
                        Dim dtt_row As DataRow = gdv_composicion.GetDataRow(gdv_composicion.GetSelectedRows(0))
                        Dim ACP As cls_articulocomposicionproceso_ = ABMarticulocomposicionproceso.obj_articulocomposicionproceso
                        dtt_row("Tipo") = "Personal"
                        dtt_row("Nombre") = ACP.proceso.ToString
                        dtt_row("Cantidad") = CType(cbo_unidaddetalle.SelectedItem, cls_unidaddetalle_).CValCargar(ACP.cantidad)
                        dtt_row("CantidadSTR") = CantidadMinToString(dtt_row("Cantidad"))
                        dtt_row("Unidad") = "Tiempo"
                        dtt_row("Valor") = ACP.valor * 60
                        dtt_row("Total") = dtt_row("Cantidad") * ACP.valor
                        dtt_row("objeto") = ACP
                        gdv_composicion.EndDataUpdate()
                    End If
            End Select
        End If
        ModificarComposicion()
    End Sub

    Private Sub tsb_ComposicionEliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsb_ComposicionEliminar.Click
        If gdv_composicion.SelectedRowsCount > 0 Then
            If Not IsDBNull(gdv_composicion.GetDataRow(gdv_composicion.GetSelectedRows(0))("Objeto")) Then
                gdv_composicion.BeginDataUpdate()
                gdv_composicion.Tag.add(gdv_composicion.GetDataRow(gdv_composicion.GetSelectedRows(0))("Objeto"))
                If Not IsDBNull(gdv_composicion.GetDataRow(gdv_composicion.GetSelectedRows(0))("mantenimiento")) Then
                    dtt_composicion.Rows.Remove(gdv_composicion.GetDataRow(gdv_composicion.GetSelectedRows(0))("mantenimiento"))
                End If
                dtt_composicion.Rows.Remove(gdv_composicion.GetDataRow(gdv_composicion.GetSelectedRows(0)))
                gdv_composicion.EndDataUpdate()
            End If
            ModificarComposicion()
        End If
    End Sub

    Private Sub tsb_ComposicionBuscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsb_ComposicionBuscar.Click
        Dim buscar As New xtf_buscardor(gdv_composicion.DataSource, "Composicion Articulos", {"Objeto"})
        If buscar.ShowDialog = Windows.Forms.DialogResult.OK Then
            gdv_composicion.FocusedRowHandle = (gdv_composicion.GetRowHandle(dtt_articulocomposicionarticulo_.Rows.IndexOf(buscar.obj_resultado)))
        End If
    End Sub
#End Region

    Private Sub ModificarComposicion()

        Dim unidaddetalle As cls_unidaddetalle_ = cbo_unidaddetalle.SelectedItem
        Dim Total As Decimal = 0
        gdv_composicion.BeginDataUpdate()
        'dtt_composicion.Rows.Clear()
        For Each row As DataRow In dtt_composicion.Rows
            Dim Elemento As Object = row("objeto")
            Select Case Elemento.GetType.ToString
                Case GetType(cls_articulocomposicionarticulo_).ToString
                    Dim dtt_row As DataRow = row
                    Dim ACA As cls_articulocomposicionarticulo_ = Elemento
                    dtt_row("Cantidad") = CType(cbo_unidaddetalle.SelectedItem, cls_unidaddetalle_).CValCargar(ACA.unidaddetalle.CCantCargar(ACA.cantidad))
                    dtt_row("CantidadSTR") = dtt_row("Cantidad")
                    dtt_row("Valor") = ACA.unidaddetalle.CValCargar(ACA.valor)
                    dtt_row("Total") = dtt_row("Cantidad") * dtt_row("Valor")
                    Total += dtt_row("Total")
                Case GetType(cls_articulocomposicionmaquinariatarea_).ToString
                    Dim dtt_row As DataRow = row
                    Dim ACM As cls_articulocomposicionmaquinariatarea_ = Elemento
                    dtt_row("Cantidad") = CType(cbo_unidaddetalle.SelectedItem, cls_unidaddetalle_).CValCargar(ACM.cantidad)
                    If ACM.tiposegunvalor = cls_articulocomposicionmaquinariatarea_.enu_segunvalor.proveedorUltimo Then
                        dtt_row("CantidadSTR") = dtt_row("Cantidad")
                        dtt_row("Unidad") = "Proceso"
                        dtt_row("Valor") = ACM.valor
                    Else
                        dtt_row("CantidadSTR") = CantidadMinToString(dtt_row("Cantidad"))
                        dtt_row("Unidad") = "Tiempo"
                        dtt_row("Valor") = ACM.valor * 60
                    End If
                    dtt_row("Total") = dtt_row("Cantidad") * ACM.valor
                    Total += dtt_row("Total")

                    'Mantenmiento
                    dtt_row = dtt_row("mantenimiento")
                    dtt_row("Cantidad") = CType(cbo_unidaddetalle.SelectedItem, cls_unidaddetalle_).CValCargar(ACM.cantidad)
                    If ACM.tiposegunvalor = cls_articulocomposicionmaquinariatarea_.enu_segunvalor.proveedorUltimo Then
                        dtt_row("CantidadSTR") = dtt_row("Cantidad")
                        dtt_row("Unidad") = "Proceso"
                        dtt_row("Valor") = ACM.valorMantenimiento
                    Else
                        dtt_row("CantidadSTR") = CantidadMinToString(dtt_row("Cantidad"))
                        dtt_row("Unidad") = "Tiempo"
                        dtt_row("Valor") = ACM.valorMantenimiento * 60
                    End If
                    dtt_row("Total") = dtt_row("Cantidad") * ACM.valorMantenimiento
                    Total += dtt_row("Total")
                Case GetType(cls_articulocomposicionproceso_).ToString
                    Dim dtt_row As DataRow = row
                    Dim ACP As cls_articulocomposicionproceso_ = Elemento
                    dtt_row("Cantidad") = CType(cbo_unidaddetalle.SelectedItem, cls_unidaddetalle_).CValCargar(ACP.cantidad)
                    If ACP.tiposegunvalor = cls_articulocomposicionproceso_.enu_segunvalor.valorProceso Then
                        dtt_row("CantidadSTR") = dtt_row("Cantidad")
                        dtt_row("Valor") = ACP.valor
                    Else
                        dtt_row("CantidadSTR") = CantidadMinToString(dtt_row("Cantidad"))
                        dtt_row("Valor") = ACP.valor * 60
                    End If
                    dtt_row("Total") = dtt_row("Cantidad") * ACP.valor
                    Total += dtt_row("Total")
            End Select
        Next

        NoVal_Costo.Text = "Costo Total: " & Math.Round(Total, int_cantdecimales) & " x " & CType(cbo_unidaddetalle.SelectedItem, cls_unidaddetalle_).ToString
        NoVal_Costo.Tag = Math.Round(Total, int_cantdecimales)
        gdv_composicion.EndDataUpdate()
        PorcentajeCostos(Total)

    End Sub

    Private Sub CargarComposicion()
        If Not IsNothing(obj_Articulo) Then
            Dim unidaddetalle As cls_unidaddetalle_ = cbo_unidaddetalle.SelectedItem
            Dim Total As Decimal = 0
            gdv_composicion.BeginDataUpdate()
            dtt_composicion.Rows.Clear()
            Dim articulo As cls_articulo_ = obj_Articulo
            If Not IsNothing(articulo.articulocomposicionarticulo_) Then
                If Not IsNothing(articulo.articulocomposicionarticulo_.Items) Then
                    For Each ACA As cls_articulocomposicionarticulo_ In articulo.articulocomposicionarticulo_.Items
                        'Dim item As New CustomListItem
                        'item.objeto = ACA
                        'item.text = ACA.ToString
                        Dim dtt_row As DataRow = dtt_composicion.NewRow
                        dtt_row("Tipo") = "Material"
                        dtt_row("Nombre") = ACA.articulo.ToString
                        dtt_row("Cantidad") = unidaddetalle.CValCargar(ACA.unidaddetalle.CCantCargar(ACA.cantidad))
                        dtt_row("CantidadSTR") = dtt_row("Cantidad")
                        dtt_row("Unidad") = ACA.unidaddetalle.ToString
                        dtt_row("Valor") = ACA.unidaddetalle.CValCargar(ACA.valor)
                        dtt_row("Total") = dtt_row("Cantidad") * dtt_row("Valor")
                        Total += dtt_row("Total")
                        dtt_row("objeto") = ACA
                        dtt_composicion.Rows.Add(dtt_row)
                    Next
                End If
            End If
            If Not IsNothing(articulo.articulocomposicionproceso_) Then
                If Not IsNothing(articulo.articulocomposicionproceso_.Items) Then
                    For Each ACP As cls_articulocomposicionproceso_ In articulo.articulocomposicionproceso_.Items
                        Dim dtt_row As DataRow = dtt_composicion.NewRow
                        dtt_row("Tipo") = "Personal"
                        dtt_row("Nombre") = ACP.proceso.ToString
                        dtt_row("Cantidad") = unidaddetalle.CValCargar(ACP.cantidad)
                        If ACP.tiposegunvalor = cls_articulocomposicionproceso_.enu_segunvalor.valorProceso Then
                            dtt_row("CantidadSTR") = dtt_row("Cantidad")
                            dtt_row("Unidad") = "Proceso"
                            dtt_row("Valor") = ACP.valor
                        Else
                            dtt_row("CantidadSTR") = CantidadMinToString(dtt_row("Cantidad"))
                            dtt_row("Unidad") = "Tiempo"
                            dtt_row("Valor") = ACP.valor * 60
                        End If
                        dtt_row("Total") = dtt_row("Cantidad") * ACP.valor
                        Total += dtt_row("Total")
                        dtt_row("objeto") = ACP
                        dtt_composicion.Rows.Add(dtt_row)
                    Next
                End If
            End If
            If Not IsNothing(articulo.articulocomposicionmaquinariatarea_) Then
                If Not IsNothing(articulo.articulocomposicionmaquinariatarea_.Items) Then
                    For Each ACM As cls_articulocomposicionmaquinariatarea_ In articulo.articulocomposicionmaquinariatarea_.Items
                        Dim dtt_row As DataRow = dtt_composicion.NewRow
                        dtt_row("Tipo") = "Maquinaria"
                        dtt_row("Nombre") = ACM.maquinariatarea.ToString
                        dtt_row("Cantidad") = unidaddetalle.CValCargar(ACM.cantidad)
                        If ACM.tiposegunvalor = cls_articulocomposicionmaquinariatarea_.enu_segunvalor.proveedorUltimo Then
                            dtt_row("CantidadSTR") = dtt_row("Cantidad")
                            dtt_row("Unidad") = "Proceso"
                            dtt_row("Valor") = ACM.valor
                        Else
                            dtt_row("CantidadSTR") = CantidadMinToString(dtt_row("Cantidad"))
                            dtt_row("Unidad") = "Tiempo"
                            dtt_row("Valor") = ACM.valor * 60
                        End If
                        dtt_row("Total") = dtt_row("Cantidad") * ACM.valor
                        Total += dtt_row("Total")
                        dtt_row("objeto") = ACM
                        dtt_composicion.Rows.Add(dtt_row)


                        'Mantenimiento
                        Dim dtt_rowM As DataRow = dtt_composicion.NewRow
                        dtt_rowM("Tipo") = "Mantenimiento"
                        dtt_rowM("Nombre") = ACM.maquinariatarea.ToString
                        dtt_rowM("Cantidad") = unidaddetalle.CValCargar(ACM.cantidad)
                        If ACM.tiposegunvalor = cls_articulocomposicionmaquinariatarea_.enu_segunvalor.proveedorUltimo Then
                            dtt_rowM("CantidadSTR") = dtt_row("Cantidad")
                            dtt_rowM("Unidad") = "Proceso"
                            dtt_rowM("Valor") = ACM.valorMantenimiento
                        Else
                            dtt_rowM("CantidadSTR") = CantidadMinToString(dtt_row("Cantidad"))
                            dtt_rowM("Unidad") = "Tiempo"
                            dtt_rowM("Valor") = Math.Round(ACM.valorMantenimiento, int_cantdecimales) * 60
                        End If
                        dtt_rowM("Total") = dtt_rowM("Cantidad") * ACM.valorMantenimiento
                        Total += dtt_rowM("Total")
                        dtt_row("mantenimiento") = dtt_rowM
                        dtt_rowM("Objeto") = Nothing
                        'dtt_row("objeto") = ACM
                        dtt_composicion.Rows.Add(dtt_rowM)
                        'CType(gdv_composicion.GetRow(gdv_composicion.GetRowHandle(gdv_composicion.RowCount - 1)), DataRowView)
                    Next
                End If
            End If
            NoVal_Costo.Text = "Costo Total: " & Math.Round(Total, int_cantdecimales) & " x " & CType(cbo_unidaddetalle.SelectedItem, cls_unidaddetalle_).ToString
            NoVal_Costo.Tag = Math.Round(Total, int_cantdecimales)
            gdv_composicion.EndDataUpdate()
            PorcentajeCostos(Total)
        End If

    End Sub

    Private Sub PorcentajeCostos(ByVal Total As Decimal)
        'Dim redrow As DataRow = Nothing
        If Total > 0 Then
            For Each row As DataRow In dtt_composicion.Rows
                'row("redrow") = False
                Dim valor As Decimal = Math.Round(row("Total") * 100 / Total, int_cantdecimales)
                row("Porcentaje") = valor & "%"
                'If Not IsNothing(redrow) Then
                '    If valor > redrow("Porcentaje") Then
                '        redrow = row
                '    End If
                'Else
                '    redrow = row
                'End If
            Next
        End If
        'If Not IsNothing(redrow) Then
        '    redrow("redrow") = True
        'End If

    End Sub

    Public Overrides Function ComprobarDatos() As Boolean
        If cbo_articulorubro.Enabled = False Then
            ErrManagerShow("001012", Me)
            Return False
        End If
        If cbo_Unidad.Enabled = False Then
            ErrManagerShow("001014", Me)
            Return False
        End If
        If cbo_unidaddetalle.Enabled = False Then
            ErrManagerShow("001014", Me)
            Return False
        End If
        If Not ControlarValidaciones() Then
            ErrManagerShow("000004", Me)
            Return False
        End If
        Return True
    End Function

    Public Shadows Sub btn_Guardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Guardar.Click
        If ComprobarDatos() Then
            obj_Articulo.nombre = txt_Nombre.Text
            obj_Articulo.nombreventa = txt_nombreventa.Text
            obj_Articulo.codigo = txt_Codigo.Text
            obj_Articulo.idarticulorubro = CType(cbo_articulorubro.SelectedItem, cls_articulorubro_).idarticulorubro

            obj_Articulo.descripcion = txt_Descripcion.Text
            obj_Articulo.notas = txt_Notas.Text
            obj_Articulo.enventa = chk_EnVenta.Checked
            obj_Articulo.tipo = opt_Tipo.SelectedIndex
            obj_Articulo.costo(CDec(CType(cbo_unidaddetalle.SelectedItem, cls_unidaddetalle_).CValGuardar(txt_costo.Text)))
            obj_Articulo.tipocosto = cbo_tipoCosto.SelectedIndex
            obj_Articulo.pathimagen = pic_imagen.Tag
            obj_Articulo.costobloqueado = chk_bloquearcosto.Checked
            obj_Articulo.url = txt_url.Text
            obj_Articulo.bulto = txt_bulto.Text


            obj_Articulo.idunidad = CType(cbo_Unidad.SelectedItem, cls_unidad_).idunidad
            obj_Articulo.idunidaddetalle = CType(cbo_unidaddetalle.SelectedItem, cls_unidaddetalle_).idunidaddetalle

            If Not IsNothing(txt_Proveedor.Tag) Then
                If obj_Articulo.tipocosto = cls_articulo_.enu_tipocosto.proveedor Then
                    obj_Articulo.idproveedor = CType(txt_Proveedor.Tag, cls_proveedor_).idproveedor
                Else
                    obj_Articulo.idproveedor = 0
                    txt_Proveedor.Tag = Nothing
                    txt_Proveedor.Text = ""
                End If
            Else
                obj_Articulo.idproveedor = 0
            End If


            'Guardo ProveedorArticulo------------------------------------------------------
            If IsNothing(obj_Articulo.proveedorArticulo_) Then
                obj_Articulo.proveedorArticulo_ = New cls_proveedorarticulo_
            End If
            If IsNothing(obj_Articulo.proveedorArticulo_.Items) Then
                obj_Articulo.proveedorArticulo_.Items = New Collections.Generic.List(Of cls_proveedorarticulo_)
            End If
            obj_Articulo.proveedorArticulo_.Items = New Collections.Generic.List(Of cls_proveedorarticulo_)
            For Each Elemento As DataRow In dtt_proveedorarticulo_2.Rows
                obj_Articulo.proveedorArticulo_.Items.Add(Elemento("Objeto"))
            Next
            For Each Elemento As cls_proveedorarticulo_ In gdv_proveedorarticulo_2.Tag
                If Elemento.idproveedorarticulo <> 0 Then
                    Elemento.Eliminar(Elemento.idproveedorarticulo)
                End If
            Next
            '---------------------------------------------------------------------

            'Guardo composicion------------------------------------------------------
            If IsNothing(obj_Articulo.articulocomposicionarticulo_) Then
                obj_Articulo.articulocomposicionarticulo_ = New cls_articulocomposicionarticulo_
            End If
            If IsNothing(obj_Articulo.articulocomposicionarticulo_.Items) Then
                obj_Articulo.articulocomposicionarticulo_.Items = New Collections.Generic.List(Of cls_articulocomposicionarticulo_)
            End If
            obj_Articulo.articulocomposicionarticulo_.Items = New Collections.Generic.List(Of cls_articulocomposicionarticulo_)

            If IsNothing(obj_Articulo.articulocomposicionmaquinariatarea_) Then
                obj_Articulo.articulocomposicionmaquinariatarea_ = New cls_articulocomposicionmaquinariatarea_
            End If
            If IsNothing(obj_Articulo.articulocomposicionmaquinariatarea_.Items) Then
                obj_Articulo.articulocomposicionmaquinariatarea_.Items = New Collections.Generic.List(Of cls_articulocomposicionmaquinariatarea_)
            End If
            obj_Articulo.articulocomposicionmaquinariatarea_.Items = New Collections.Generic.List(Of cls_articulocomposicionmaquinariatarea_)

            If IsNothing(obj_Articulo.articulocomposicionproceso_) Then
                obj_Articulo.articulocomposicionproceso_ = New cls_articulocomposicionproceso_
            End If
            If IsNothing(obj_Articulo.articulocomposicionproceso_.Items) Then
                obj_Articulo.articulocomposicionproceso_.Items = New Collections.Generic.List(Of cls_articulocomposicionproceso_)
            End If
            obj_Articulo.articulocomposicionproceso_.Items = New Collections.Generic.List(Of cls_articulocomposicionproceso_)

            For Each Elemento As DataRow In dtt_composicion.Rows
                Select Case Elemento("Objeto").GetType.ToString
                    Case GetType(cls_articulocomposicionarticulo_).ToString
                        obj_Articulo.articulocomposicionarticulo_.Items.Add(Elemento("Objeto"))
                    Case GetType(cls_articulocomposicionmaquinariatarea_).ToString
                        obj_Articulo.articulocomposicionmaquinariatarea_.Items.Add(Elemento("Objeto"))
                    Case GetType(cls_articulocomposicionproceso_).ToString
                        obj_Articulo.articulocomposicionproceso_.Items.Add(Elemento("Objeto"))
                End Select
            Next
            For Each Elemento As Object In gdv_composicion.Tag
                Select Case Elemento.GetType.ToString
                    Case GetType(cls_articulocomposicionarticulo_).ToString
                        If Elemento.idarticulocomposicionarticulo <> 0 Then
                            Elemento.Eliminar(Elemento.idarticulocomposicionarticulo)
                        End If
                    Case GetType(cls_articulocomposicionmaquinariatarea_).ToString
                        If Elemento.idarticulocomposicionmaquinariatarea <> 0 Then
                            Elemento.Eliminar(Elemento.idarticulocomposicionmaquinariatarea)
                        End If
                    Case GetType(cls_articulocomposicionproceso_).ToString
                        If Elemento.idarticulocomposicionproceso <> 0 Then
                            Elemento.Eliminar(Elemento.idarticulocomposicionproceso)
                        End If
                End Select
            Next
            '---------------------------------------------------------------------


            If txt_ID.Text = "" Then
                obj_Articulo.Nuevo(True)
                If frm_listado.Visible Then
                    ulg_row = CType(frm_listado, xtf_LISTADOarticulo_).AgregarItem(obj_Articulo)
                End If
                Modificar(obj_Articulo, frm_listado, ulg_row)
            Else
                obj_Articulo.Modificar()
                If frm_listado.Visible Then
                    CType(frm_listado, xtf_LISTADOarticulo_).ModificarItem(obj_Articulo, ulg_row)
                End If
                Modificar(obj_Articulo, frm_listado, ulg_row)
            End If
            flg_Modificado = False : btn_Guardar.Enabled = False : bbi_guardar.Enabled = False
        End If
    End Sub

    Private Sub btn_Registro_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Registro.Click
        If Not IsNothing(obj_Articulo.registro) Then
            Dim ABMRegistro As New xtf_ABMRegistro(obj_Articulo.registro)
            If ABMRegistro.ShowDialog() = Windows.Forms.DialogResult.OK Then
                flg_Modificado = True
            End If
        End If
    End Sub


    Private Sub btn_Cerrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Cerrar.Click
        If flg_Modificado Then
            bol_comprobarCerrado = False
            Select Case ErrManagerShow("000001", Me)
                Case Windows.Forms.DialogResult.Yes
                    If ComprobarDatos() Then
                        btn_Guardar_Click(Nothing, Nothing)
                    Else
                        Exit Sub
                    End If
                Case Windows.Forms.DialogResult.Cancel : bol_comprobarCerrado = True
                    Exit Sub
            End Select
        End If
        Me.Dispose()
    End Sub

#Region "Proveedor Articulos"

    Private Sub tsb_ArticuloNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsb_articulosNuevo.Click
        Dim ABMproveedorArticulo As New xtf_ABMproveedorarticulo_(xtf_ABMproveedorarticulo_.enu_modo.proveedor, cbo_Unidad.SelectedItem)
        If ABMproveedorArticulo.ShowDialog = Windows.Forms.DialogResult.OK Then
            If obj_Articulo.idarticulo <> 0 Then
                ABMproveedorArticulo.obj_proveedorarticulo.idarticulo = obj_Articulo.idarticulo
            End If
            Dim flag As Boolean = False
            gdv_proveedorarticulo_2.BeginDataUpdate()
            Dim Item As DataRow = dtt_proveedorarticulo_2.NewRow
            For Each row As DataRow In dtt_proveedorarticulo_2.Rows
                If row("idproveedor") = ABMproveedorArticulo.obj_proveedorarticulo.idproveedor Then
                    Item = row
                    flag = True
                    Exit For
                End If
            Next
            Item("idproveedor") = ABMproveedorArticulo.obj_proveedorarticulo.idproveedor
            Item("Proveedor") = ABMproveedorArticulo.obj_proveedorarticulo.proveedor.ToString
            Item("Valor") = ABMproveedorArticulo.obj_proveedorarticulo.unidaddetalle.CValCargar(ABMproveedorArticulo.obj_proveedorarticulo.valor)
            Item("Unidad") = ABMproveedorArticulo.obj_proveedorarticulo.unidaddetalle.ToString
            Item("Moneda") = ABMproveedorArticulo.obj_proveedorarticulo.moneda.simbolo
            If IsNothing(ABMproveedorArticulo.obj_proveedorarticulo.registro) Then
                Item("Fecha") = Now.Date
            Else
                Item("Fecha") = ABMproveedorArticulo.obj_proveedorarticulo.registro.fechacreado
            End If
            Item("Objeto") = ABMproveedorArticulo.obj_proveedorarticulo
            If flag = False Then
                dtt_proveedorarticulo_2.Rows.Add(Item)
            End If
            gdv_proveedorarticulo_2.EndDataUpdate()
        End If
    End Sub

    Private Sub gridView1_DoubleClick(ByVal sender As Object, ByVal e As EventArgs) Handles gdv_proveedorarticulo_2.DoubleClick
        Dim view As DevExpress.XtraGrid.Views.Grid.GridView = CType(sender, DevExpress.XtraGrid.Views.Grid.GridView)
        Dim pt As Point = view.GridControl.PointToClient(Control.MousePosition)
        DoRowDoubleClick(view, pt)
    End Sub

    Public Overridable Sub DoRowDoubleClick(ByVal view As DevExpress.XtraGrid.Views.Grid.GridView, ByVal pt As Point)
        Dim info As DevExpress.XtraGrid.Views.Grid.ViewInfo.GridHitInfo = view.CalcHitInfo(pt)
        If info.InRow OrElse info.InRowCell Then
            Dim colCaption As String
            If info.Column Is Nothing Then
                colCaption = "N/A"
            Else
                colCaption = info.Column.GetCaption()
            End If
            tsb_articulosModificar.PerformClick()
        End If
    End Sub

    Private Sub tsb_ArticulosModificar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsb_articulosModificar.Click
        If gdv_proveedorarticulo_2.SelectedRowsCount > 0 Then
            Dim ABMproveedorArticulo As New xtf_ABMproveedorarticulo_(xtf_ABMproveedorarticulo_.enu_modo.proveedor, cbo_Unidad.SelectedItem)
            ABMproveedorArticulo.Modificar(gdv_proveedorarticulo_2.GetDataRow(gdv_proveedorarticulo_2.GetSelectedRows(0))("objeto"))
            If ABMproveedorArticulo.ShowDialog = Windows.Forms.DialogResult.OK Then
                gdv_proveedorarticulo_2.BeginDataUpdate()
                ABMproveedorArticulo.obj_proveedorarticulo.idproveedorarticulo = 0
                Dim Item As DataRow = gdv_proveedorarticulo_2.GetDataRow(gdv_proveedorarticulo_2.GetSelectedRows(0))
                Item("idproveedor") = ABMproveedorArticulo.obj_proveedorarticulo.idarticulo
                Item("Proveedor") = ABMproveedorArticulo.obj_proveedorarticulo.proveedor.ToString
                Item("Valor") = ABMproveedorArticulo.obj_proveedorarticulo.unidaddetalle.CValCargar(ABMproveedorArticulo.obj_proveedorarticulo.valor)
                Item("Unidad") = ABMproveedorArticulo.obj_proveedorarticulo.unidaddetalle.ToString
                Item("Moneda") = ABMproveedorArticulo.obj_proveedorarticulo.moneda.simbolo
                If IsNothing(ABMproveedorArticulo.obj_proveedorarticulo.registro) Then
                    Item("Fecha") = Now.Date
                Else
                    Item("Fecha") = ABMproveedorArticulo.obj_proveedorarticulo.registro.fechacreado
                End If
                Item("Objeto") = ABMproveedorArticulo.obj_proveedorarticulo
                gdv_proveedorarticulo_2.EndDataUpdate()
            End If
        End If
    End Sub

    Private Sub tsb_ArticuloEliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsb_articulosEliminar.Click
        If gdv_proveedorarticulo_2.SelectedRowsCount > 0 Then
            gdv_proveedorarticulo_2.BeginDataUpdate()
            gdv_proveedorarticulo_2.Tag.add(gdv_proveedorarticulo_2.GetDataRow(gdv_proveedorarticulo_2.GetSelectedRows(0))("Objeto"))
            dtt_proveedorarticulo_2.Rows.Remove(gdv_proveedorarticulo_2.GetDataRow(gdv_proveedorarticulo_2.GetSelectedRows(0)))
            gdv_proveedorarticulo_2.EndDataUpdate()
        End If
    End Sub

    Private Sub tsb_articulosBuscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsb_articulosBuscar.Click
        Dim buscar As New xtf_buscardor(gdv_proveedorarticulo_2.DataSource, "Proveedor Articulos", {"idproveedor", "Objeto"})
        If buscar.ShowDialog = Windows.Forms.DialogResult.OK Then
            'gdv_proveedorarticulo_.SetFocusedValue((buscar.obj_resultado))
            gdv_proveedorarticulo_2.FocusedRowHandle = (gdv_proveedorarticulo_2.GetRowHandle(dtt_proveedorarticulo_2.Rows.IndexOf(buscar.obj_resultado)))
            'gdv_proveedorarticulo_.SelectRow(gdv_proveedorarticulo_.GetRowHandle(42))

        End If
    End Sub
#End Region

    Private Sub cbo_tipoCosto_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbo_tipoCosto.SelectedIndexChanged
        If Not IsNothing(obj_Articulo) Then
            Select Case cbo_tipoCosto.SelectedIndex
                Case cls_articulo_.enu_tipocosto.fijo
                    txt_costo.Text = obj_Articulo.costo(cls_articulo_.enu_tipocosto.fijo)
                    txt_costo.Properties.ReadOnly = False
                    txt_Proveedor.Enabled = False
                Case cls_articulo_.enu_tipocosto.proveedor
                    txt_Proveedor.Enabled = True
                    If Not IsNothing(txt_Proveedor.Tag) Then
                        txt_costo.Text = CType(cbo_unidaddetalle.SelectedItem, cls_unidaddetalle_).CValCargar(obj_Articulo.costo(cbo_tipoCosto.SelectedIndex, CType(txt_Proveedor.Tag, cls_proveedor_).idproveedor))
                    Else
                        txt_costo.Text = 0
                    End If
                    txt_costo.Properties.ReadOnly = True
                    'Case cls_articulo_.enu_tipocosto.compuesto
                    '    txt_costo.Text = (NoVal_Costo.Tag)
                    '    txt_costo.Properties.ReadOnly = True
                    '    txt_Proveedor.Enabled = False
                Case Else
                    txt_costo.Text = CType(cbo_unidaddetalle.SelectedItem, cls_unidaddetalle_).CValCargar(obj_Articulo.costo(CType(cbo_tipoCosto.SelectedIndex, cls_articulo_.enu_tipocosto)))
                    txt_costo.Properties.ReadOnly = True
                    txt_Proveedor.Enabled = False
            End Select
        End If
    End Sub

    Private Sub pic_imagen_EditValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pic_imagen.EditValueChanged

    End Sub

    Private Sub pic_imagen_MouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles pic_imagen.MouseDoubleClick
        Dim OFD As New OpenFileDialog
        OFD.Filter = "Archivos de imagen(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|Todos los archivos (*.*)|*.*"
        If OFD.ShowDialog = Windows.Forms.DialogResult.OK Then
            Try
                pic_imagen.Image = System.Drawing.Image.FromFile(OFD.FileName)
                pic_imagen.Tag = OFD.FileName
            Catch ex As Exception
                pic_imagen.Image = Nothing
                pic_imagen.Tag = ""
            End Try
        End If
    End Sub

    Private Sub txt_Proveedor_ButtonClick(ByVal sender As Object, ByVal e As DevExpress.XtraEditors.Controls.ButtonPressedEventArgs) Handles txt_Proveedor.ButtonClick
        Dim buscar As xtf_buscardor
        Dim proveedor_ As New cls_proveedor_
        proveedor_.CargarTodos(True)
        buscar = New xtf_buscardor("Proveedores", proveedor_, {"codigo|Codigo", "razonsocial|Razon Social"})
        If buscar.ShowDialog() = Windows.Forms.DialogResult.OK Then
            txt_Proveedor.Text = buscar.obj_resultado.ToString
            txt_Proveedor.Tag = buscar.obj_resultado
            Dim proveedor As cls_proveedor_ = buscar.obj_resultado
            cbo_tipoCosto_SelectedIndexChanged(Nothing, Nothing)
        End If
    End Sub

    Private Sub cbo_Unidad_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbo_Unidad.SelectedIndexChanged
        Dim tmp_obj As Object = Nothing
        If Not IsNothing(cbo_unidaddetalle.SelectedItem) Then
            tmp_obj = cbo_unidaddetalle.SelectedItem
        End If
        cbo_unidaddetalle.Properties.Items.Clear()

        If Not IsNothing(CType(cbo_Unidad.SelectedItem, cls_unidad_).unidaddetalle_) Then
            For Each unidaddetealle As cls_unidaddetalle_ In CType(cbo_Unidad.SelectedItem, cls_unidad_).unidaddetalle_.Items
                cbo_unidaddetalle.Properties.Items.Add(unidaddetealle)
            Next
            cbo_unidaddetalle.SelectedIndex = 0
            cbo_unidaddetalle.Enabled = True

            If Not IsNothing(tmp_obj) Then
                For Each obj As cls_unidaddetalle_ In cbo_unidaddetalle.Properties.Items
                    If obj.idunidaddetalle = tmp_obj.idunidaddetalle Then
                        cbo_unidaddetalle.SelectedItem = obj
                        Exit For
                    End If
                Next
            End If
        Else
            cbo_unidaddetalle.Enabled = False
            cbo_unidaddetalle.SelectedItem = Nothing
        End If
    End Sub

    Private Sub cbo_unidaddetalle_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbo_unidaddetalle.SelectedIndexChanged
        ModificarComposicion()
        cbo_tipoCosto_SelectedIndexChanged(Nothing, Nothing)
    End Sub


    'Private Sub objBandedGridView_RowCellStyle(ByVal sender As Object, ByVal e As DevExpress.XtraGrid.Views.Grid.RowCellStyleEventArgs) Handles gdv_composicion.RowCellStyle
    '    If gdv_composicion.GetRowCellValue(e.RowHandle, "redrow") And gdv_composicion.GetRow(e.RowHandle).selected = False Then
    '        e.Appearance.BackColor = Color.Yellow
    '    End If
    'End Sub

    Private Sub SimpleButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SimpleButton1.Click
        Dim ABMComposicion As New xtf_ABMComposicion(obj_Articulo.idarticulo, cbo_unidaddetalle.SelectedItem)
        If ABMComposicion.ShowDialog = Windows.Forms.DialogResult.OK Then
            gdv_composicion.BeginDataUpdate()
            Dim dtt_row As DataRow = dtt_composicion.NewRow
            If Not IsNothing(ABMComposicion.obj_articulocomposicionarticulo) Then
                Dim ACA As cls_articulocomposicionarticulo_ = ABMComposicion.obj_articulocomposicionarticulo
                dtt_row("Tipo") = "Material"
                dtt_row("Nombre") = ACA.articulo.ToString
                dtt_row("Cantidad") = CType(cbo_unidaddetalle.SelectedItem, cls_unidaddetalle_).CValCargar(ACA.unidaddetalle.CCantCargar(ACA.cantidad))
                dtt_row("CantidadSTR") = dtt_row("Cantidad")
                dtt_row("Unidad") = ACA.unidaddetalle.ToString
                dtt_row("Valor") = ACA.unidaddetalle.CValCargar(ACA.valor)
                dtt_row("Total") = dtt_row("Cantidad") * dtt_row("Valor")
                dtt_row("objeto") = ACA
            End If
            If Not IsNothing(ABMComposicion.obj_articulocomposicionmaquinariatarea) Then
                Dim ACM As cls_articulocomposicionmaquinariatarea_ = ABMComposicion.obj_articulocomposicionmaquinariatarea
                dtt_row("Tipo") = "Maquinaria"
                dtt_row("Nombre") = ACM.maquinariatarea.ToString
                dtt_row("Cantidad") = CType(cbo_unidaddetalle.SelectedItem, cls_unidaddetalle_).CValCargar(ACM.cantidad)
                If ACM.tiposegunvalor = cls_articulocomposicionmaquinariatarea_.enu_segunvalor.proveedorUltimo Then
                    dtt_row("CantidadSTR") = dtt_row("Cantidad")
                    dtt_row("Unidad") = "Proceso"
                    dtt_row("Valor") = ACM.valor
                Else
                    dtt_row("CantidadSTR") = CantidadMinToString(dtt_row("Cantidad"))
                    dtt_row("Unidad") = "Tiempo"
                    dtt_row("Valor") = ACM.valor * 60
                End If
                dtt_row("Total") = dtt_row("Cantidad") * ACM.valor
                dtt_row("objeto") = ACM

                'Mantenimiento
                Dim dtt_rowM As DataRow = dtt_composicion.NewRow
                dtt_rowM("Tipo") = "Mantenimiento"
                dtt_rowM("Nombre") = ACM.maquinariatarea.ToString
                dtt_rowM("Cantidad") = CType(cbo_unidaddetalle.SelectedItem, cls_unidaddetalle_).CValCargar(ACM.cantidad)
                dtt_rowM("CantidadSTR") = CantidadMinToString(dtt_row("Cantidad"))
                dtt_rowM("Unidad") = "Tiempo"
                dtt_rowM("Valor") = ACM.valorMantenimiento * 60
                dtt_rowM("Total") = dtt_rowM("Cantidad") * ACM.valorMantenimiento
                dtt_row("mantenimiento") = dtt_rowM
                dtt_rowM("Objeto") = Nothing
                'dtt_row("objeto") = ACM
                dtt_composicion.Rows.Add(dtt_rowM)
            End If
            If Not IsNothing(ABMComposicion.obj_articulocomposicionproceso) Then
                Dim ACP As cls_articulocomposicionproceso_ = ABMComposicion.obj_articulocomposicionproceso
                dtt_row("Tipo") = "Personal"
                dtt_row("Nombre") = ACP.proceso.ToString
                dtt_row("Cantidad") = CType(cbo_unidaddetalle.SelectedItem, cls_unidaddetalle_).CValCargar(ACP.cantidad)
                If ACP.tiposegunvalor = cls_articulocomposicionproceso_.enu_segunvalor.valorProceso Then
                    dtt_row("CantidadSTR") = dtt_row("Cantidad")
                    dtt_row("Unidad") = "Proceso"
                    dtt_row("Valor") = ACP.valor
                Else
                    dtt_row("CantidadSTR") = CantidadMinToString(dtt_row("Cantidad"))
                    dtt_row("Unidad") = "Tiempo"
                    dtt_row("Valor") = ACP.valor * 60
                End If
                dtt_row("Total") = dtt_row("Cantidad") * ACP.valor
                dtt_row("objeto") = ACP
            End If
            dtt_composicion.Rows.Add(dtt_row)
            gdv_composicion.EndDataUpdate()
            ModificarComposicion()
        End If
    End Sub

    Private Sub btn_Arbol_Click(sender As System.Object, e As System.EventArgs) Handles btn_Arbol.Click
        Dim ABMArbol As New xtf_ArbolComposicion(obj_Articulo)
        ABMArbol.ShowDialog()
    End Sub

    Private Sub BarButtonItem1_ItemClick(sender As System.Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem1.ItemClick
        MsgBox("Hola")
    End Sub

    Private Sub chk_MateriasPrimas_CheckedChanged(sender As System.Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles chk_MateriasPrimas.CheckedChanged
        Dim frm As New xtf_MateriaPrima_(obj_Articulo)
        frm.ShowDialog()
    End Sub

    Private Sub chk_EnVenta_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chk_EnVenta.CheckedChanged
        If chk_EnVenta.Checked Then
            lbl_nombreventa.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always
            If txt_nombreventa.Text = "" Then
                txt_nombreventa.Text = txt_Nombre.Text
            End If
        Else
            lbl_nombreventa.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never
        End If
    End Sub
End Class